<?php
// +----------------------------------------------------------------------+
// |                       	     TpvMarket                                |
// +----------------------------------------------------------------------+
// |                	     www.tpvmarket.com                            |
// +----------------------------------------------------------------------+
// |       	     Copyright (c) 2013 Carlos Mora Molina    			      |
// +----------------------------------------------------------------------+
// | Este programa es software libre. Puede distribuirlo  y/o modificarlo |
// | bajo los términos de la  licencia GNU General Public License  tal  y |
// | como la publica la Fundación de Software Libre, bajo la denominación |
// | GPL, en su versión 2 o posterior (versión inglesa).                  |
// |                                                                      |
// | This program is free software. You can redistribute it and/or modify |
// | it under the terms of the GNU General Public License as published by |
// | the Free Software Foundation; either version 2 or later of the GPL.  |
// +----------------------------------------------------------------------+
// | Autores/Authors:                                                     |
// |          Carlos Mora <ozonosp@gmail.com>                             |
// +----------------------------------------------------------------------+
//
// Optimizado para ser documentado con doxygen
// $Id: Exp $

/** @defgroup DaoGenerator Modulos Autogenerados por DaoGenerator
 *  @brief  Este módulo contiene todas las clases generadas automáticamente por DaoGenerator, http://code.google.com/p/database-dao-generator/ 
 */
 
/** 
 * @author Carlos Mora
 * @ingroup DaoGenerator
 *
 * Clase de acceso a datos mysql
 */ 
class Datasource {

	var $dbLink;
	private $showSql;

	/**
	 * Constuctor de la conexión
	 * @param string $dbHost
	 * @param int $dbPort
	 * @param string $dbName
	 * @param string $dbuser
	 * @param string $dbpasswd
	 * @param string $codification
	 */
	function Datasource($dbHost, $dbPort, $dbName, $dbuser, $dbpasswd, $codification = 'utf8') {
				
		$this->showSql = false; //Por defecto no se muestra el código sql

		// Change this line to reflect whatever Database system you are using:
		$this->dbLink = mysqli_connect ($dbHost, $dbuser, $dbpasswd, $dbName, $dbPort);
		mysqli_set_charset($this->dbLink, $codification);
	}


	/**
	 * Ejecuta una consulta sql
	 * @param unknown $sql
	 * @return resource
	 */
	function execute($sql) {
				
		if($this->showSql) error_log($sql); //Si le solicitamos que muestre el sql se envian las consultas al error_log
		// Change this line to reflect whatever Database system you are using:
		$result = mysqli_query($this->dbLink, $sql);
		if($this->checkErrors($sql) === false) return false;

		return $result;
	}


	/**
	 * Ejecuta una consulta sql sin notificar errores
	 * @param unknown $sql
	 * @return resource
	 */
	function executeBlind($sql) {

		if($this->showSql) error_log($sql); //Si le solicitamos que muestre el sql se envian las consultas al error_log
		// Change this line to reflect whatever Database system you are using:
		$result = mysqli_query($this->dbLink, $sql);

		return $result;
	}


	/**
	 * Devuelve la siguiente fila de una consulta
	 * @param unknown $result
	 * @return multitype:
	 */
	function nextRow ($result) {

		// Change this line to reflect whatever Database system you are using:
		$row = mysqli_fetch_assoc($result);

		return $row;
	}


	/**
	 * Comprueba si se han generado errores en la última consulta
	 * Se llama cada vez que se realiza una consulta con execute
	 * @param unknown $sql
	 */
	function checkErrors($sql) {

		$err=mysqli_error($this->dbLink);
		$errno=mysqli_errno($this->dbLink);

		if($errno) {
			$message = "La consulta '$sql' ha causado el error: '$err'";
		
			error_log($message); //Enviamos el error al log de errores

			return false;

		} 
			return true;
		
	}

		/**
		 * Formatea una cadena para que sea segura en mysql
		 * @param string Cadena de entrada
		 * @return string Escapado
		 */
		function escapeString($string){
			return mysqli_real_escape_string($this->dbLink,$string);
		}
		
		/**
		 * Devuelve el número de filas afectadas por la última consulta
		 */
		function affectedRows(){
			return mysqli_affected_rows($this->dbLink);
		}

		/**
		 * Activa o desactiva el modo de visualización de sql
		 * Si se activa envía al error_log todas las consultas sql
		 * @param bool Activación o desactivacion
		 */
		function testMode($value){
			$this->showSql = $value;
		}
}

?>